import WxRequest from 'mina-request'
import { getStorage, clearStorage } from './storage'
import { modal, toast } from './extendApi'
import { env } from './env'

// 实例化
const instance = new WxRequest({
  // baseURL: 'https://gmall-prod.atguigu.cn/mall-api',
  baseURL: env.baseURL,
  timeout: 15000,
  isLoading: false
})

// 配置请求拦截器
instance.interceptors.request = (config) => {
  // 在发送请求之前，判断本地是否存在访问令牌token
  const token = getStorage('token')
  // 如果存在，需要在请求头中添加token字段
  if (token) {
    config.header['token'] = token
  }

  return config
}

// 配置响应拦截器
instance.interceptors.response = async (response) => {
  const { isSuccess, data } = response
  if (!isSuccess) {
    wx.showToast({
      title: '网络异常请重试',
      icon: 'error'
    })
    return response
  }
  // 判断服务器的响应状态码
  switch (data.code) {
    // 请求成功
    case 200:
      // 简化数据
      return data
    // 没有token或token失效 让用户重新登录
    case 208:
      const res = await modal({
        content: '鉴权失败，请重新登录',
        showCancel: false //不显示取消按钮
      })
      if (res) {
        // 清除失效token，切需要清除本地存储的全部信息
        clearStorage()
        // 跳转到登录页面
        wx.navigateTo({
          url: '/pages/login/login'
        })
      }
      return Promise.reject(response)
    default:
      toast({
        title: '程序出现异常，请联系客服或稍后重试'
      })
      return Promise.reject(response)
  }
}

export default instance
